/**
 * API 接口模块
 * 统一管理所有后端接口调用
 * 根据接口文档设计
 */

import { get, post, put, del } from '@/utils/request'
import config from '@/config'

// ==================== 认证相关 ====================

/**
 * 用户登录
 * POST /auth/login
 * @param {object} data - { phone, password }
 */
export function login(data) {
  return post('/auth/login', data)
}

/**
 * 用户退出登录
 * POST /auth/logout
 */
export function logout() {
  return post('/auth/logout')
}

/**
 * 用户注册
 * POST /users
 * @param {object} data - { userName, password, phone, icon?, birthdate?, preferences? }
 */
export function register(data) {
  return post('/users', data)
}

// ==================== 用户相关 ====================

/**
 * 获取用户信息
 * GET /users/{userId}
 * @param {number} userId - 用户 ID
 */
export function getUserInfo(userId) {
  return get(`/users/${userId}`)
}

/**
 * 获取当前用户信息
 * GET /users/me
 */
export function getCurrentUser() {
  return get('/users/me')
}

/**
 * 获取用户列表（管理员）
 * GET /users
 * @param {object} params - { keyword? }
 */
export function getUserList(params) {
  return get('/users', params)
}

/**
 * 获取管理员列表
 * GET /users/admins
 * @param {object} params - { keyword? }
 */
export function getAdminList(params) {
  return get('/users/admins', params)
}

/**
 * 创建管理员
 * POST /users/admins
 * @param {object} data - { userName, password, phone, gender, role? }
 */
export function createAdmin(data) {
  return post('/users/admins', data)
}

/**
 * 修改用户信息
 * PUT /users/{userId}
 * @param {number} userId - 用户 ID
 * @param {object} data - { userName?, password?, phone?, birthdate?, icon?, status? }
 */
export function updateUserInfo(userId, data) {
  return put(`/users/${userId}`, data)
}

/**
 * 删除用户
 * DELETE /users/{userId}
 * @param {number} userId - 用户 ID
 */
export function deleteUser(userId) {
  return del(`/users/${userId}`)
}

/**
 * 修改用户偏好
 * PUT /users/{userId}/preferences
 * @param {number} userId - 用户 ID
 * @param {object} data - { preferences: string[] }
 */
export function updateUserPreferences(userId, data) {
  return put(`/users/${userId}/preferences`, data)
}

/**
 * 修改密码
 * PUT /users/{userId}/pwd
 * @param {number} userId - 用户 ID
 * @param {object} data - { oldPassword, newPassword }
 */
export function updatePassword(userId, data) {
  return put(`/users/${userId}/pwd`, data)
}

// ==================== 用户行为相关 ====================

/**
 * 记录用户搜索行为
 * POST /behavior/search
 * @param {object} data - { userId, keyword, timestamp, clickedProductId?, clicked?, clickRank? }
 */
export function recordSearchBehavior(data) {
  return post('/behavior/search', data)
}

/**
 * 记录用户浏览行为
 * POST /behavior/browse
 * @param {object} data - { userId, productId, startTime, endTime, pageDepth, pageCount, category?, price?, positiveRate?, heat?, releaseTime? }
 */
export function recordBrowseBehavior(data) {
  return post('/behavior/browse', data)
}

/**
 * 获取浏览历史
 * GET /behavior/browse/history
 * @param {object} params - { limit? }
 */
export function getBrowseHistory(params = {}) {
  return get('/behavior/browse/history', params)
}

// ==================== 购物车相关 ====================

/**
 * 获取购物车列表
 * GET /cart
 */
export function getCartList() {
  return get('/cart')
}

/**
 * 添加商品到购物车
 * POST /cart
 * @param {object} data - { productId, quantity? }
 */
export function addToCart(data) {
  return post('/cart', data)
}

/**
 * 修改购物车商品数量
 * PUT /cart/{productId}
 * @param {number} productId - 商品 ID
 * @param {object} data - { quantity }
 */
export function updateCartQuantity(productId, data) {
  return put(`/cart/${productId}`, data)
}

/**
 * 勾选/取消勾选购物车商品
 * PUT /cart/{productId}/selected
 * @param {number} productId - 商品 ID
 * @param {object} data - { selected: boolean }
 */
export function updateCartSelection(productId, data) {
  return put(`/cart/${productId}/selected`, data)
}

/**
 * 清空购物车
 * DELETE /cart
 */
export function clearCart() {
  return del('/cart')
}

// ==================== 商品相关 ====================

/**
 * 获取商品详情
 * GET /products/{productId}
 * @param {number} productId - 商品 ID
 */
export function getProductDetail(productId) {
  return get(`/products/${productId}`)
}

/**
 * 根据关键词搜索商品
 * GET /products
 * @param {object} params - { keyword, platformId?, page?, pageSize? }
 */
export function searchProducts(params) {
  return get('/products', params)
}

/**
 * 根据关键词和权重搜索商品
 * POST /products/search-with-weights
 * @param {object} data - { keyword, priceWeight, reputationWeight, heatWeight, timelinessWeight, platformId?, page?, pageSize? }
 */
export function searchProductsWithWeights(data) {
  return post('/products/search-with-weights', data)
}

/**
 * 获取商品类型列表
 * GET /products/types
 */
export function getProductTypes() {
  return get('/products/types')
}

/**
 * 获取相似商品
 * GET /products/{productId}/similar
 * @param {number} productId - 商品 ID
 * @param {number} limit - 返回数量
 */
export function getSimilarProducts(productId, limit = 10) {
  return get(`/products/${productId}/similar`, { limit })
}

/**
 * 商品比价
 * POST /products/compare
 * @param {object} data - { productIds: number[] }
 */
export function compareProducts(data) {
  return post('/products/compare', data)
}

/**
 * 添加商品
 * POST /products
 * @param {object} data
 */
export function addProduct(data) {
  return post('/products', data)
}

/**
 * 更新商品
 * PUT /products/{productId}
 * @param {string} productId
 * @param {object} data
 */
export function updateProduct(productId, data) {
  return put(`/products/${productId}`, data)
}

/**
 * 删除商品
 * DELETE /products/{productId}
 * @param {string} productId
 */
export function deleteProduct(productId) {
  return del(`/products/${productId}`)
}

/**
 * 管理端商品列表
 * GET /products/admin/list
 */
export function getProductList(params = {}) {
  return get('/products/admin/list', params)
}

// ==================== 评论相关 ====================

/**
 * 获取商品评论列表
 * GET /products/{productId}/comments
 * @param {number} productId - 商品 ID
 * @param {object} params - { page?, pageSize? }
 */
export function getProductComments(productId, params = {}) {
  return get(`/products/${productId}/comments`, params)
}

/**
 * 添加评论
 * POST /products/{productId}/comments
 * @param {number} productId - 商品 ID
 * @param {object} data - { userId, content, rating }
 */
export function addComment(productId, data) {
  return post(`/products/${productId}/comments`, data)
}

/**
 * 查看自己的评论
 * GET /users/me/comments
 * @param {object} params - { page?, pageSize? }
 */
export function getMyComments(params = {}) {
  return get('/users/me/comments', params)
}

// ==================== 推荐相关 ====================

/**
 * 获取推荐商品列表
 * GET /recommend/products
 * @param {number} limit - 商品数量限制
 */
export function getRecommendProducts(limit) {
  return get('/recommend/products', limit ? { limit } : {})
}

/**
 * 获取推荐列表（备用接口）
 * GET /recommendations
 * @param {number} limit - 商品数量限制
 */
export function getRecommendations(limit) {
  return get('/recommendations', limit ? { limit } : {})
}

// ==================== 排行榜相关 ====================

/**
 * 获取推荐榜
 * GET /rank/recommend
 * @param {number} limit - 商品数量限制
 */
export function getRecommendRanking(limit) {
  return get('/rank/recommend', limit ? { limit } : {})
}

/**
 * 获取性价比榜
 * GET /rank/value
 * @param {number} limit - 商品数量限制
 */
export function getValueRanking(limit) {
  return get('/rank/value', limit ? { limit } : {})
}

/**
 * 获取新品榜
 * GET /rank/new-product
 * @param {number} limit - 商品数量限制
 */
export function getNewProductRanking(limit) {
  return get('/rank/new-product', limit ? { limit } : {})
}

// ==================== 平台相关 ====================

/**
 * 获取平台详情
 * GET /platforms/{platformId}
 * @param {number} platformId - 平台 ID
 */
export function getPlatformInfo(platformId) {
  return get(`/platforms/${platformId}`)
}

// ==================== 访问统计相关 ====================

/**
 * 记录页面访问
 * POST /stats/visit
 * @param {object} data - { visitorId, pageUrl?, referer? }
 */
export function recordPageVisit(data) {
  return post('/stats/visit', data)
}

/**
 * 记录链接跳转
 * POST /stats/link-click
 * @param {object} data - { visitorId, productId?, linkUrl, platformId? }
 */
export function recordLinkClick(data) {
  return post('/stats/link-click', data)
}

/**
 * 获取访问统计数据
 * GET /stats/overview
 * @param {object} params - { period: '6d' | '30d' | 'quarter' | 'year' }
 */
export function getVisitStats(params = {}) {
  return get('/stats/overview', params)
}

/**
 * 刷新统计数据
 * POST /stats/refresh
 */
export function refreshVisitStats() {
  return post('/stats/refresh')
}

// ==================== 数据采集（管理员功能） ====================

/**
 * 触发数据采集
 * POST /data-collector/collect
 * @param {object} data - { platformId?, category? }
 */
export function triggerDataCollection(data = {}) {
  return post('/data-collector/collect', data)
}

/**
 * 数据清洗
 * POST /data-collector/clean
 */
export function cleanData() {
  return post('/data-collector/clean')
}

/**
 * 更新数据库
 * POST /data-collector/update
 */
export function updateDatabase() {
  return post('/data-collector/update')
}

// ==================== 文件上传 ====================

/**
 * 上传文件
 * POST /files/upload
 * @param {File} file - 文件对象
 */
export function uploadFile(file) {
  // 确保FormData构造函数正确调用
  if (typeof FormData === 'undefined') {
    const error = new Error('浏览器不支持FormData')
    console.error('文件上传错误: 浏览器不支持FormData')
    throw error
  }
  
  // 明确使用FormData构造函数，避免构建工具压缩错误
  const FormDataConstructor = window.FormData
  const formData = new FormDataConstructor()
  formData.append('file', file)
  
  console.log('开始上传文件:', file.name, '大小:', file.size, '类型:', file.type)
  console.log('上传URL:', `${config.API_BASE_URL}/files/upload`)
  
  // 文件上传接口不需要认证，使用自定义请求避免发送Authorization头
  return fetch(`${config.API_BASE_URL}/files/upload`, {
    method: 'POST',
    body: formData,
    // 不设置Content-Type，让浏览器自动设置multipart/form-data边界
  }).then(async response => {
    console.log('上传响应状态:', response.status, response.statusText)
    
    if (!response.ok) {
      const error = new Error(`HTTP ${response.status}: ${response.statusText}`)
      error.code = response.status
      console.error('HTTP错误:', error)
      throw error
    }
    
    const data = await response.json()
    console.log('上传响应数据:', data)
    
    // 处理业务错误
    if (data.code && data.code !== 200 && data.code !== 0) {
      const error = new Error(data.message || '上传失败')
      error.code = data.code
      error.response = data
      console.error('业务错误:', error)
      throw error
    }
    
    return data
  }).catch(error => {
    console.error('文件上传错误:', error)
    throw error
  })
}

// ==================== 分类相关 ====================

/**
 * 获取所有分类映射
 * GET /categories
 */
export function getAllCategories() {
  return get('/categories')
}

/**
 * 获取大类列表
 * GET /categories/big
 */
export function getBigCategories() {
  return get('/categories/big')
}

/**
 * 获取指定大类的小类列表
 * GET /categories/{bigCategory}/sub
 * @param {string} bigCategory - 大类名称
 */
export function getSubCategories(bigCategory) {
  return get(`/categories/${encodeURIComponent(bigCategory)}/sub`)
}

// ==================== 统一导出 ====================

export default {
  // 认证
  login,
  register,
  logout,

  // 用户
  getUserInfo,
  getUserList,
  getAdminList,
  createAdmin,
  getCurrentUser,
  updateUserInfo,
  deleteUser,
  updateUserPreferences,
  updatePassword,

  // 用户行为
  recordSearchBehavior,
  recordBrowseBehavior,

  // 购物车
  getCartList,
  addToCart,
  updateCartQuantity,
  updateCartSelection,
  clearCart,

  // 商品
  getProductDetail,
  searchProducts,
  searchProductsWithWeights,
  getProductTypes,
  getSimilarProducts,
  compareProducts,
  addProduct,
  updateProduct,
  deleteProduct,
  getProductList,

  // 评论
  getProductComments,
  addComment,
  getMyComments,

  // 推荐
  getRecommendProducts,
  getRecommendations,

  // 排行榜
  getRecommendRanking,
  getValueRanking,
  getNewProductRanking,

  // 平台
  getPlatformInfo,

  // 文件上传
  uploadFile,

  // 数据采集
  triggerDataCollection,
  cleanData,
  updateDatabase,

  // 访问统计
  recordPageVisit,
  recordLinkClick,
  getVisitStats,
  refreshVisitStats,

  // 分类
  getAllCategories,
  getBigCategories,
  getSubCategories
}
